LRU 缓存淘汰策略
内存管理的一种页面置换算法。LRU全称是Least Recently Used,即最近最久未使用的意思,最久未使用的数据,下次被访问的可能最小,我们需要删除它。
链表实现
维护一个有序单链表,靠近尾部是最早访问,头部为最新访问。当有新数据被访问,我们从头开始遍历链表:
- 若此数据之前已有,从原来的位置删除,再将数据放在头结点;
- 若之前没有:缓存未满,直接放在头部;缓存已满,删除尾部数据,将其放在头部。
时间复杂度:时间复杂度为 O(n),需要遍历。
LRU缓存淘汰算法
散列表实现
1.上面所讲的几个散列表和链表组合的例子里,我们都是使用双向链表。如果把双向链表改成单链表,还能否正常工作?为什么呢?
2.假设猎聘网有10万名猎头,每个猎头可以通过做任务(比如发布职位)来积累积分,然后通过积分来下载简历。假设你是猎聘网的一名工程师,如何在内存中存储这10万个猎头的ID和积分信息,让它能够支持这样几个操作:
1)根据猎头ID查收查找、删除、更新这个猎头的积分信息;
2)查找积分在某个区间的猎头ID列表;
3)查找按照积分从小到大排名在第x位到第y位之间的猎头ID列表。
以积分排序构建一个跳表,再以猎头 ID 构建一个散列表。
1)ID 在散列表中所以可以 O(1) 查找到这个猎头;
2)积分以跳表存储,跳表支持区间查询;
3)这点根据目前学习的知识暂时无法实现,老师文中也提到了。